#include <QStyleOption>
#include <QPainter>
#include <QDebug>
#include <QFontMetrics>

#include "qlspluginwidget.h"
#include "ui_qlspluginwidget.h"

QlsPluginWidget::QlsPluginWidget(QWidget *parent) :
	QWidget(parent),
	ui(new Ui::QlsPluginWidget)
{
	ui->setupUi(this);

	/* 最多显示3行，防止有换行符，设定为2行。要是插件介绍开头三个换行符就GDZ吧 */
	ui->informationLabel->setLineWidth(2);
}

QlsPluginWidget::~QlsPluginWidget()
{
	delete ui;
}

/* 绘图事件重载 */
void QlsPluginWidget::paintEvent(QPaintEvent *event)
{
	/* 子控件qss样式有效 */
	QStyleOption opt;
	opt.init(this);
	QPainter p(this);
	style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
	QWidget::paintEvent(event);
}

/* 尺寸变化事件重载 */
void QlsPluginWidget::resizeEvent(QResizeEvent *event)
{
	/* 根据尺寸修改插件信息标签显示内容 */
	ChangeInformationLabelTextBySize();
	QWidget::resizeEvent(event);
}

/* 根据尺寸修改插件信息标签显示内容 */
void QlsPluginWidget::ChangeInformationLabelTextBySize()
{
	/* 插件名 */
	QFontMetrics nameFontWidth(ui->nameLabel->font());
	QString nameElideNote = nameFontWidth.elidedText(
				m_pluginInfo.m_interfaceInfo->m_name,
				Qt::ElideRight,
				ui->nameLabel->width() * ui->nameLabel->lineWidth()
				);

	ui->nameLabel->setText(nameElideNote);
	ui->nameLabel->setToolTip(m_pluginInfo.m_interfaceInfo->m_name);

	/* 插件信息 */
	QFontMetrics fontWidth(ui->informationLabel->font());
	QString elideNote = fontWidth.elidedText(
				m_pluginInfo.m_interfaceInfo->m_information,
				Qt::ElideRight,
				ui->informationLabel->width() * ui->informationLabel->lineWidth()
				);

	ui->informationLabel->setText(elideNote);
	ui->informationLabel->setToolTip(m_pluginInfo.m_interfaceInfo->m_information);
}

/* 获取插件信息 */
PluginInfo QlsPluginWidget::pluginInfo() const
{
	return m_pluginInfo;
}

/* 设置插件信息 */
void QlsPluginWidget::setPluginInfo(const PluginInfo &pluginInfo)
{
	m_pluginInfo = pluginInfo;

	/* 填充图标 */
	ui->logoLabel->setStyleSheet(QString("QLabel{"
										 "	border-image: url(%1);"
										 "}").arg(m_pluginInfo.m_interfaceInfo->m_logoPath));
	ui->logoLabel->setToolTip(m_pluginInfo.m_interfaceInfo->m_name);

	/* 插件版本号 */
	ui->versionLabel1->setToolTip(m_pluginInfo.m_interfaceInfo->m_version);
	ui->versionLabel2->setText(m_pluginInfo.m_interfaceInfo->m_version);
	ui->versionLabel2->setToolTip(m_pluginInfo.m_interfaceInfo->m_version);

	/* 插件介绍 */
	ChangeInformationLabelTextBySize();

	/* 加载状态 */
	/* 已加载 */
	if(m_pluginInfo.m_isLoaded)
	{
		ui->loadBtn->setText(tr("卸载"));
		ui->loadBtn->setToolTip(tr("卸载"));
	}
	/* 未加载 */
	else
	{
		ui->loadBtn->setText(tr("加载"));
		ui->loadBtn->setToolTip(tr("加载"));
	}
}

/* 加载 */
void QlsPluginWidget::on_loadBtn_clicked()
{
	emit sigLoad(m_pluginInfo);
}
